NULL,not null属性空约束
------------------
mysql的NULL不是数据,也不是类型!只是标识属性!
用于说明某个字段,是否可以为null(是否可以什么都不存)
NULL采用关键NULL表示!(不是字符串)
是:NULL,而不是:‘NULL’
属性:
null 表示可以为空

not null,表示不能为空

如果,在添加数据时 ,没有指定值,也可能会是NULL!
default属性,默认值约束
---------------
采用 default 关键字,来限定一个字段的默认值,在没有指定字段数据时,采用默认值!


default 与 null 的处理关系!
如果此时,该字段被指定了一个null:
不能使用默认值,允许为null则为null,不允许则插入失败!

如果一个字段没有指定默认值,那么默认为NULL

此时:如果在定义该字段时,不允许为NULL,则插入时,必须保证该字段有值才可以!
(另外一个选择是增加默认值)

默认值,存在一些特殊的标记关键字:
default,用在值中的关键字!

current\_timestamp,用在第一个时间戳类型的字段上,表示当前的时间!

典型在很多表上增加一个 update\_time 将其默认值设置成 current\_timestamp。就可以记录下当前记录的最后操作时间!
主键约束/唯一约束,primary unique
------------------------
站在约束的角度,限制的,该字段,值要唯一!
但是 主键 与 唯一 不是一个概念:
都是索引的一种!
主键:
可以唯一标识记录的字段,称之为主键!
唯一:
保证在某个字段上的数据是唯一的,可以设置成唯一约束!
但是,一个表,只能有一个主键!
典型的,在创建表时,主动增加一个 非实体的自然属性,充当主键,采用整型,运算速度快!

其他的 唯一字段,建立唯一约束!
建立:
两种方案:

一旦创建了主键:
默认就是不能为空:

唯一,使用 unique key 来创建!


一个表可以有多个唯一,但是只能有一个主键!
注意:主键或者是唯一,都可以由 多个字段组成!

因此,主键 与 字段的概念:字段来充当主键,不是字段就是主键!(称之为复合主键)
尽量采用 id 一个来作为主键!

### 如果管理的主键/唯一呢
删除主键:
alter table表名 drop primary key;

添加主键
alter table 表名 add primary key(‘字段列表’);

删除唯一
alter table 表名 drop index index\_name;
索引的名字,可以通过 show create table 看到!


增加唯一
alter table 表名 add unique key 索引名字 (字段列表)

自动增长,auto\_increment
--------------------
用于主键,只有一个字段主键,才能使用auto\_increment!
可以,从1开始,逐一递增的数值!
目的是保证唯一,计算方面!

典型的,从1 开始,没有负数,可以采用 无符号 unsigned整型!


注意: unsigned,不是列属性,是类型的一部分!(包括zerofill)因此位置上与类型在一起!

comment,注释
----------

外键!
预习
==
1, 范式
2, 表实体之间的关系
3, 外键约束
4,语句(查询语句)
作业
==
1 说说那些地方可以设置编码
2 增加对 库的管理(删,增加)
增加 对 表的管理(增加,改名,删除)
增加 对 字段的管理(增加,删除)
增加 对 数据的管理 (增加,删除,编辑)
位,bit,比特,计算机可以处理的最小单元
字节,Bytes 存储的最基本单位。KB 千字节, MB,兆字节,GB,1024\*MB,TB,1024\*GB。一个字节 8 个位。 1Byte = 8 bit.
字符,char,一个显示逻辑上的单位,一个图形就是一个字符。
字,双字节
双字,4字节。
4, 编程,定义一个函数
参数为 table\_name 表名,要求大家返回一个数组,内容是当前表的结构信息!只需要字段名,如果有主键,则在返回其主键(不考虑符合主键)
f1(stu)
array(‘id’, ‘name’, ‘pk’=\>’id’)
5,建立一个学生信息表!尽可能利用多种类型!
编码:
建表,建库,建字段 设置(数据库中的数据的编码)
PHP作为mysql服务器的客户端,设置的客户端编码和连接编码(set names)
设置php返回给浏览器数据的编码,(Content-Type,header(),\<meta\>)
PHP文件本身保存的编码(文件编码,通过文本编辑器设置)
[浏览器查看时,可以强制指定编码]